/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#include "stdafx.h"
#include "矢量绘图着色材质.h"
#include "core/引擎配置.h"


S_材质* f_初始化凸边形单色填充材质(S_设备环境& Ctx, E_MS次数 采样, E_填充模式 填充模式) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 单色填充图元配置;

	if (E_填充模式::e_填充面 == 填充模式) {
		单色填充图元配置 = {
					{
						{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//投影
						{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//属性
						{2, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//变换
						{3, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//颜色
						{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//顶点
						{5, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//图元 顶点偏移

					},
					{
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
					},
					{
						{S_引擎配置::m_UI着色器文件根路径 + "UI单色_顶点阶段.spv", E_着色阶段::e_顶点着色},
						{S_引擎配置::m_UI着色器文件根路径 + "UI单色填充凸边形_几何阶段.spv", E_着色阶段::e_几何着色},
						{S_引擎配置::m_UI着色器文件根路径 + "UI单色_片源阶段.spv", E_着色阶段::e_像素着色},
					}
		};
	}
	else {
		单色填充图元配置 = {
					{
						{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//投影
						{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//属性
						{2, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//变换
						{3, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//颜色
						{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//顶点
						{5, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//图元 顶点偏移

					},
					{
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
					},
					{
						{S_引擎配置::m_UI着色器文件根路径 + "UI单色_顶点阶段.spv", E_着色阶段::e_顶点着色},
						{S_引擎配置::m_UI着色器文件根路径 + "UI单色描边凸边形_几何阶段.spv", E_着色阶段::e_几何着色},
						{S_引擎配置::m_UI着色器文件根路径 + "UI单色_片源阶段.spv", E_着色阶段::e_像素着色},
					}
		};
	}


	auto* 单色填充Shader = f_create着色(Ctx, 单色填充图元配置);

	S_线管创建参数 线绘制线管参数({ 1024, 576 });
	线绘制线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线绘制线管参数.m_填充模式 = 填充模式;
	线绘制线管参数.m_采样 = 采样;
	//线绘制线管参数.m_填充模式 = E_填充模式::e_填充面;
	auto* 单色填充线管 = f_create线管(Ctx, *单色填充Shader, 线绘制线管参数);

	材质 = f_create基本材质(单色填充Shader, 单色填充线管);
	
	return 材质;
}

S_材质* f_初始化边缘阴影材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");
	
	S_线管创建配置 渐变背景纹理填充图元配置 = {
		{
			{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},
			{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},
			{2, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},
			{3, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},

		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI描边阴影_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI描边阴影_几何阶段.spv", E_着色阶段::e_几何着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI单色_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 渐变背景纹理填充图元配置);

	S_线管创建参数 渐变背景纹理填充线管参数({ 1024, 576 });
	渐变背景纹理填充线管参数.m_绘制方式 = E_绘制方式::e_画邻接连续线段;
	渐变背景纹理填充线管参数.m_填充模式 = E_填充模式::e_填充面;
	渐变背景纹理填充线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 渐变背景纹理填充线管参数);

	//材质->m_Pipeline = 单色填充线管;
	//材质->m_Shader = 单色填充Shader;
	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}




S_材质* f_初始化线阴影材质(S_设备环境& Ctx, E_MS次数 采样) {
	return nullptr;
}







S_材质* f_初始化条纹材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置 = {
		{
			{0, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},		//投影
			{1, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},		//属性
			{2, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},	//变换
		    {3, E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},	//颜色
		    {DEF_BINDING_WIDGET_LineProp, E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},	//颜色
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI条纹_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI条纹_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};

	auto* Shader = f_create着色(Ctx, 图元配置);

	S_线管创建参数 线管参数({ 1024, 576 });
	线管参数.m_绘制方式 = E_绘制方式::e_画扇形;
	线管参数.m_填充模式 = E_填充模式::e_填充面;
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

/*S_材质* f_初始化条纹笔刷材质(S_设备环境& Ctx, E_MS次数 采样, E_填充模式 填充模式)
{
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_着色器创建配置 单色填充图元配置;

	if (E_填充模式::e_填充面 == 填充模式) {
		单色填充图元配置 = {
					{
						{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//投影
						{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//属性
						{2, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//变换
						{3, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//颜色
						{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//顶点
						{5, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//图元 顶点偏移

					},
					{
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
					},
					{
						{"D:/U/Project/engine/材质/着色/2D/UI单色_顶点阶段.spv", E_着色阶段::e_顶点着色},
						{"D:/U/Project/engine/材质/着色/2D/UI单色填充凸边形_几何阶段.spv", E_着色阶段::e_几何着色},
						{"D:/U/Project/engine/材质/着色/2D/UI单色_片源阶段.spv", E_着色阶段::e_像素着色},
					}
		};
	}
	else {
		单色填充图元配置 = {
					{
						{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//投影
						{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//属性
						{2, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//变换
						{3, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//颜色
						{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//顶点
						{5, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//图元 顶点偏移

					},
					{
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
						//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
					},
					{
						{"D:/U/Project/engine/材质/着色/2D/UI单色_顶点阶段.spv", E_着色阶段::e_顶点着色},
						{"D:/U/Project/engine/材质/着色/2D/UI单色描边凸边形_几何阶段.spv", E_着色阶段::e_几何着色},
						{"D:/U/Project/engine/材质/着色/2D/UI单色_片源阶段.spv", E_着色阶段::e_像素着色},
					}
		};
	}


	auto* 单色填充Shader = f_create着色(Ctx, 单色填充图元配置);

	S_线管创建参数 线绘制线管参数({ 1024, 576 });
	线绘制线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线绘制线管参数.m_填充模式 = 填充模式;
	线绘制线管参数.m_采样 = 采样;
	//线绘制线管参数.m_填充模式 = E_填充模式::e_填充面;
	auto* 单色填充线管 = f_create线管(Ctx, *单色填充Shader, 线绘制线管参数);
	//材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");
	材质->m_Pipeline = 单色填充线管;
	材质->m_Shader = 单色填充Shader;

	return 材质;
}*/

S_材质* f_初始化外部纹理材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置 = {
		{
			{0, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{1, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{2, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},

			{10, E_着色阶段::e_像素着色, E_板载缓存类型::e_IMAGE_SAMPLER},
		},
		{
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI纹理填充_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI单纹理_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	S_线管创建参数 线管参数({ 1024, 576 });
	线管参数.m_绘制方式 = E_绘制方式::e_三角形带;
	线管参数.m_填充模式 = E_填充模式::e_填充面;
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化刻度线材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置 = {
		{
			{DEF_BINDING_PROJECT, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_PROP, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
			{DEF_BINDING_WIDGET_Color, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI纵向刻度_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI纵向刻度_片源阶段.spv", E_着色阶段::e_像素着色},
			//{"D:/U/Project/engine/材质/着色/2D/编译/UI纵向刻度_几何阶段.spv", E_着色阶段::e_几何着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	S_线管创建参数 线管参数({ 1024, 576 });
	//线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_绘制方式 = E_绘制方式::e_画线段;
	线管参数.m_填充模式 = E_填充模式::e_填充线;
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化网格刻度线材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置 = {
		{
			{DEF_BINDING_PROJECT,       E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_PROP,   E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},
			{DEF_BINDING_WIDGET_Color,  E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI网格刻度_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI网格刻度_几何阶段.spv", E_着色阶段::e_几何着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI纵向刻度_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	S_线管创建参数 线管参数({ 1024, 576 });
	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充线;
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化文本块材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置 = {
			{
				{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},
				{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},
				{2, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},
				{3, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},
				{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},
				//{5, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},

				{10, E_着色阶段::e_像素着色, E_板载缓存类型::e_IMAGE_SAMPLER},
			},
			{
				//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
				//{1,sizeof(vec3),0,E_数据格式::e_F_R32G32B32},
			},
			{
				{S_引擎配置::m_UI着色器文件根路径 + "UI文本块_顶点阶段.spv", E_着色阶段::e_顶点着色},
				{S_引擎配置::m_UI着色器文件根路径 + "UI文本块_几何阶段.spv", E_着色阶段::e_几何着色},
				{S_引擎配置::m_UI着色器文件根路径 + "UI文本块_片源阶段.spv", E_着色阶段::e_像素着色},
			}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	S_线管创建参数 线管参数({ 1024, 576 });
	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充面;
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化线材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 单色填充图元配置 = {
		{
			{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//投影
			{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},		//属性
			{2, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//变换
			{3, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//颜色
			{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//顶点
			{5, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//图元 顶点偏移

		},
		{
			//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI单色_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI线_几何阶段.spv", E_着色阶段::e_几何着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI单色_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};

	auto* 单色填充Shader = f_create着色(Ctx, 单色填充图元配置);

	S_线管创建参数 线绘制线管参数({ 1024, 576 });
	线绘制线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线绘制线管参数.m_填充模式 = E_填充模式::e_填充线;
	线绘制线管参数.m_采样 = 采样;
	
	auto* 单色填充线管 = f_create线管(Ctx, *单色填充Shader, 线绘制线管参数);
	材质 = f_create基本材质(单色填充Shader, 单色填充线管);

	return 材质;
}

S_材质* f_初始化单纹理材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置 = {
		{
			{DEF_BINDING_PROJECT, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_PROP, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
			//{DEF_BINDING_WIDGET_Color, E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},

			{DEF_BINDING_WIDGET_Texture, E_着色阶段::e_像素着色, E_板载缓存类型::e_IMAGE_SAMPLER},
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI纹理_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI纹理_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	S_线管创建参数 线管参数({ 1024, 576 });
	线管参数.m_绘制方式 = E_绘制方式::e_画扇形;
	线管参数.m_填充模式 = E_填充模式::e_填充面;
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化间接单色填充材质(S_设备环境& Ctx, E_MS次数 采样, E_填充模式 填充模式) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;
	
	S_线管创建参数 线管参数({ 1024, 576 });
	if (填充模式 == E_填充模式::e_填充线) {
		线管参数.m_绘制方式 = E_绘制方式::e_画连续线;

		图元配置 = {
			{
				{DEF_BINDING_PROJECT,         E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			               //视图矩阵
				{DEF_BINDING_WIDGET_PROP,     E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			               //画布属性
				{DEF_BINDING_WIDGET_MATRIX,   E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},		                   //变换矩阵
				{DEF_BINDING_WIDGET_Color,    E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},		                   //颜色
				{DEF_BINDING_WIDGET_LineProp, E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO}, //线参数
			},
			{
				{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
				{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
				{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			},
			{
				{S_引擎配置::m_UI着色器文件根路径 + "UI纹理_顶点阶段.spv", E_着色阶段::e_顶点着色},
				{S_引擎配置::m_UI着色器文件根路径 + "UI单色描边_片源阶段.spv", E_着色阶段::e_像素着色},
			}
		};
	}
	else {
		线管参数.m_绘制方式 = E_绘制方式::e_画扇形;

		图元配置 = {
			{
				{DEF_BINDING_PROJECT,       E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			//视图矩阵
				{DEF_BINDING_WIDGET_PROP,   E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			//画布属性
				{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},		//变换矩阵
				{DEF_BINDING_WIDGET_Color,  E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},		//颜色
				
			},
			{
				{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
				{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
				{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			},
			{
				{S_引擎配置::m_UI着色器文件根路径 + "UI纹理_顶点阶段.spv", E_着色阶段::e_顶点着色},
				{S_引擎配置::m_UI着色器文件根路径 + "UI单色填充_片源阶段.spv", E_着色阶段::e_像素着色},
			}
		};
	}

	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_填充模式 = 填充模式;
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化间接绘制_单色图标材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;

	S_线管创建参数 线管参数({ 1024, 576 });
	图元配置 = {
		{
			{DEF_BINDING_PROJECT,		E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_PROP,	E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},
			{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
			{DEF_BINDING_WIDGET_Color,	E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},
			//{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},

			{DEF_BINDING_WIDGET_Texture, E_着色阶段::e_像素着色, E_板载缓存类型::e_IMAGE_SAMPLER},
		},
		{
			//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			//{1,sizeof(vec3),0,E_数据格式::e_F_R32G32B32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI图标_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI图标_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};
	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充点;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);
	return 材质;
}

S_材质* f_初始化间接绘制_图标材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;

	S_线管创建参数 线管参数({ 1024, 576 });
	图元配置 = {
		{
			{DEF_BINDING_PROJECT,       E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			//视图矩阵
			{DEF_BINDING_WIDGET_PROP,   E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			//画布属性
			{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},		//变换矩阵
			{DEF_BINDING_WIDGET_Color,  E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},		//颜色

			{DEF_BINDING_WIDGET_Texture, E_着色阶段::e_像素着色, E_板载缓存类型::e_IMAGE_SAMPLER},
		},
		{
			//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			//{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI图标_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI纯纹理图标_片源阶段.spv", E_着色阶段::e_像素着色},
		    //{"D:/U/Project/engine/材质/着色/2D/编译/UI彩色图标_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};
	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充点;
	
	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);
	return 材质;
}

S_材质* f_初始化_动态线材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;

	S_线管创建参数 线管参数({ 1024, 576 });

	图元配置 = {
		{
			{DEF_BINDING_PROJECT, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			//视图矩阵
			{DEF_BINDING_WIDGET_PROP, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},		//画布属性
			{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},	//变换矩阵
			{DEF_BINDING_WIDGET_Color, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},		//颜色
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI动态线_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI动态线_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画连续线;
	线管参数.m_填充模式 = E_填充模式::e_填充线;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化_曲线点材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;

	S_线管创建参数 线管参数({ 1024, 576 });

	图元配置 = {
		{
			{0, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},			//视图矩阵
			{1, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},			//画布属性
			{3, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},		//颜色
			{4, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},		//曲线
			//{5, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},		//曲线ID
			
			//{10, E_着色阶段::e_像素着色, E_板载缓存类型::e_IMAGE_SAMPLER},
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI曲线_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI曲线点_几何阶段.spv", E_着色阶段::e_几何着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI点_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充点;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化_曲线材质(S_设备环境& Ctx, E_MS次数 采样, bool 多曲线) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;

	S_线管创建参数 线管参数({ 1024, 576 });

	std::string 着色器路径;
	if (多曲线) {
		着色器路径 = S_引擎配置::m_UI着色器文件根路径 + "UI多曲线_几何阶段.spv";
	}
	else {
		着色器路径 = S_引擎配置::m_UI着色器文件根路径 + "UI曲线_几何阶段.spv";
	}

	图元配置 = {
		{
			{DEF_BINDING_PROJECT, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},				//视图矩阵
			{DEF_BINDING_WIDGET_PROP, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},			//画布属性
			{DEF_BINDING_WIDGET_CurvePoint, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},	//曲线
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI曲线_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{着色器路径, E_着色阶段::e_几何着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI动态线_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充线;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}


S_材质* f_初始化_色轮材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;

	S_线管创建参数 线管参数({ 1024, 576 });

	图元配置 = {
		{
			{DEF_BINDING_PROJECT,         E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},   //视图矩阵
			{DEF_BINDING_WIDGET_PROP,     E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},   //画布属性
			{DEF_BINDING_WIDGET_MATRIX,   E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},	//变换矩阵
			{DEF_BINDING_WIDGET_Color,    E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},	//颜色
			{DEF_BINDING_WIDGET_LineProp, E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},  //渐变
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI色轮_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI色轮_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画扇形;
	线管参数.m_填充模式 = E_填充模式::e_填充面;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}



S_材质* f_初始化_渐变材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建配置 图元配置;

	S_线管创建参数 线管参数({ 1024, 576 });

	图元配置 = {
		{
			{DEF_BINDING_PROJECT,         E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},    //视图矩阵
			{DEF_BINDING_WIDGET_PROP,     E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},    //画布属性
			{DEF_BINDING_WIDGET_MATRIX,   E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},   //变换矩阵
			{DEF_BINDING_WIDGET_Color,    E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},   //颜色
			{DEF_BINDING_WIDGET_LineProp, E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},   //渐变
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI渐变_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI渐变_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画扇形;
	线管参数.m_填充模式 = E_填充模式::e_填充面;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化_过程纹理材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建参数 线管参数({ 1024, 576 });

	S_线管创建配置 图元配置 = {
		{
			{DEF_BINDING_PROJECT, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},			//视图矩阵
			{DEF_BINDING_WIDGET_PROP, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},		//画布属性
			{DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},	//变换矩阵
			{DEF_BINDING_WIDGET_TexProp, E_着色阶段::e_像素着色, E_板载缓存类型::e_SSBO},	//纹理属性
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI渐变_顶点阶段.spv", E_着色阶段::e_顶点着色},
			{S_引擎配置::m_UI着色器文件根路径 + "UI噪波纹理_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画扇形;
	线管参数.m_填充模式 = E_填充模式::e_填充面;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}


S_材质* f_初始化_表格线材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建参数 线管参数({ 1024, 576 });

	S_线管创建配置 图元配置 = {
		{
			{DEF_BINDING_PROJECT, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},	
		    {DEF_BINDING_WIDGET_PROP, E_着色阶段::e_几何着色, E_板载缓存类型::e_UBO},	
		    {DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},  
		    {DEF_BINDING_WIDGET_Color, E_着色阶段::e_几何着色, E_板载缓存类型::e_SSBO},   
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI曲线_顶点阶段.spv", E_着色阶段::e_顶点着色},
		    {S_引擎配置::m_UI着色器文件根路径 + "UI网格线_几何阶段.spv", E_着色阶段::e_几何着色},
		    {S_引擎配置::m_UI着色器文件根路径 + "UI动态线_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画点集;
	线管参数.m_填充模式 = E_填充模式::e_填充线;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}

S_材质* f_初始化_矢量线材质(S_设备环境& Ctx, E_MS次数 采样) {
	S_材质* 材质 = f_create基本材质(E_基本材质类型::e_单色材质, "a");

	S_线管创建参数 线管参数({ 1024, 576 });

	S_线管创建配置 图元配置 = {
		{
			{DEF_BINDING_PROJECT, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},	
		    {DEF_BINDING_WIDGET_PROP, E_着色阶段::e_顶点着色, E_板载缓存类型::e_UBO},	
		    {DEF_BINDING_WIDGET_MATRIX, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},  
		    {DEF_BINDING_WIDGET_Color, E_着色阶段::e_顶点着色, E_板载缓存类型::e_SSBO},   
		},
		{
			{0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		    {0,sizeof(vec2),0,E_数据格式::e_F_R32G32},
		},
		{
			{S_引擎配置::m_UI着色器文件根路径 + "UI矢量线_顶点阶段.spv", E_着色阶段::e_顶点着色},
		    {S_引擎配置::m_UI着色器文件根路径 + "UI矢量线_片源阶段.spv", E_着色阶段::e_像素着色},
		}
	};


	auto* Shader = f_create着色(Ctx, 图元配置);

	线管参数.m_绘制方式 = E_绘制方式::e_画连续线;
	线管参数.m_填充模式 = E_填充模式::e_填充线;
	线管参数.m_图元重启 = true;

	线管参数.m_采样 = 采样;
	auto* 线管 = f_create线管(Ctx, *Shader, 线管参数);

	材质 = f_create基本材质(Shader, 线管);

	return 材质;
}











